{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Vi2Tl3VMnX68"
      },
      "source": [
        "##### Copyright 2021 The TensorFlow Probability Authors.\n",
        "\n",
        "Licensed under the Apache License, Version 2.0 (the \"License\");"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "cellView": "form",
        "id": "FW9em4rqnw0S"
      },
      "outputs": [],
      "source": [
        "#@title Licensed under the Apache License, Version 2.0 (the \"License\"); { display-mode: \"form\" }\n",
        "# you may not use this file except in compliance with the License.\n",
        "# You may obtain a copy of the License at\n",
        "#\n",
        "# https://www.apache.org/licenses/LICENSE-2.0\n",
        "#\n",
        "# Unless required by applicable law or agreed to in writing, software\n",
        "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
        "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
        "# See the License for the specific language governing permissions and\n",
        "# limitations under the License."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Zn9IkdJNQblp"
      },
      "source": [
        "# TFP Release Notes notebook (0.13.0)\n",
        "\n",
        "The intent of this notebook is to help TFP 0.13.0 \"come to life\" via some small snippets - little demos of things you can achieve with TFP.\n",
        "\n",
        "\n",
        "<table class=\"tfo-notebook-buttons\" align=\"left\">\n",
        "  <td>\n",
        "    <a target=\"_blank\" href=\"https://www.tensorflow.org/probability/examples/TFP_Release_Notebook_0_13_0\"><img src=\"https://www.tensorflow.org/images/tf_logo_32px.png\" />View on TensorFlow.org</a>\n",
        "  </td>\n",
        "  <td>\n",
        "    <a target=\"_blank\" href=\"https://colab.research.google.com/github/tensorflow/probability/blob/main/tensorflow_probability/examples/jupyter_notebooks/TFP_Release_Notebook_0_13_0.ipynb\"><img src=\"https://www.tensorflow.org/images/colab_logo_32px.png\" />Run in Google Colab</a>\n",
        "  </td>\n",
        "  <td>\n",
        "    <a target=\"_blank\" href=\"https://github.com/tensorflow/probability/blob/main/tensorflow_probability/examples/jupyter_notebooks/TFP_Release_Notebook_0_13_0.ipynb\"><img src=\"https://www.tensorflow.org/images/GitHub-Mark-32px.png\" />View source on GitHub</a>\n",
        "  </td>\n",
        "  <td>\n",
        "    <a href=\"https://storage.googleapis.com/tensorflow_docs/probability/tensorflow_probability/examples/jupyter_notebooks/TFP_Release_Notebook_0_13_0.ipynb\"><img src=\"https://www.tensorflow.org/images/download_logo_32px.png\" />Download notebook</a>\n",
        "  </td>\n",
        "</table>"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "id": "Ceywx-aaQblq"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "\u001b[K     |████████████████████████████████| 5.4MB 8.8MB/s \n",
            "\u001b[K     |████████████████████████████████| 3.9MB 37.1MB/s \n",
            "\u001b[K     |████████████████████████████████| 296kB 31.6MB/s \n",
            "\u001b[?25h"
          ]
        }
      ],
      "source": [
        "#@title Installs & imports { vertical-output: true }\n",
        "!pip3 install -qU tensorflow==2.5.0 tensorflow_probability==0.13.0 tensorflow-datasets inference_gym\n",
        "\n",
        "import tensorflow as tf\n",
        "import tensorflow_probability as tfp\n",
        "assert '0.13' in tfp.__version__, tfp.__version__\n",
        "assert '2.5' in tf.__version__, tf.__version__\n",
        "\n",
        "physical_devices = tf.config.list_physical_devices('CPU')\n",
        "tf.config.set_logical_device_configuration(\n",
        "    physical_devices[0],\n",
        "    [tf.config.LogicalDeviceConfiguration(),\n",
        "     tf.config.LogicalDeviceConfiguration()])\n",
        "\n",
        "tfd = tfp.distributions\n",
        "tfb = tfp.bijectors\n",
        "tfpk = tfp.math.psd_kernels\n",
        "\n",
        "import matplotlib.pyplot as plt\n",
        "import numpy as np\n",
        "import scipy.interpolate\n",
        "import IPython\n",
        "import seaborn as sns\n",
        "import logging"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "iHBsq_t5IIQy"
      },
      "source": [
        "## Distributions [core math]"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "6N1TInBM8V1r"
      },
      "source": [
        "### `BetaQuotient`\n",
        "Ratio of two independent Beta-distributed random variables"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {
        "id": "Yq4tIvL8lhLW"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light",
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.hist(tfd.BetaQuotient(concentration1_numerator=5.,\n",
        "                          concentration0_numerator=2.,\n",
        "                          concentration1_denominator=3.,\n",
        "                          concentration0_denominator=8.).sample(1_000, seed=(1, 23)),\n",
        "         bins='auto');"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "DtR1AvKz9y-P"
      },
      "source": [
        "### `DeterminantalPointProcess`\n",
        "\n",
        "Distribution over subsets (represented as one-hot) of a given set. Samples follow a repulsivity property (probabilities are proportional to the volume spanned by vectors corresponding to the selected subset of points), which tends toward sampling diverse subsets. [Compare against i.i.d. Bernoulli samples.]"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "id": "QS5JxWys9ygT"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "tfp.distributions.DeterminantalPointProcess(\"DeterminantalPointProcess\", batch_shape=[4], event_shape=[256], dtype=int32)\n"
          ]
        },
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 864x432 with 8 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "grid_size = 16\n",
        "# Generate grid_size**2 pts on the unit square.\n",
        "grid = np.arange(0, 1, 1./grid_size).astype(np.float32)\n",
        "import itertools\n",
        "points = np.array(list(itertools.product(grid, grid)))\n",
        "\n",
        "# Create the kernel L that parameterizes the DPP.\n",
        "kernel_amplitude = 2.\n",
        "kernel_lengthscale = [.1, .15, .2, .25]  # Increasing length scale indicates more points are \"nearby\", tending toward smaller subsets.\n",
        "kernel = tfpk.ExponentiatedQuadratic(kernel_amplitude, kernel_lengthscale)\n",
        "kernel_matrix = kernel.matrix(points, points)\n",
        "\n",
        "eigenvalues, eigenvectors = tf.linalg.eigh(kernel_matrix)\n",
        "dpp = tfd.DeterminantalPointProcess(eigenvalues, eigenvectors)\n",
        "print(dpp)\n",
        "\n",
        "# The inner-most dimension of the result of `dpp.sample` is a multi-hot\n",
        "# encoding of a subset of {1, ..., ground_set_size}.\n",
        "# We will compare against a bernoulli distribution.\n",
        "samps_dpp = dpp.sample(seed=(1, 2))  # 4 x grid_size**2\n",
        "logits = tf.broadcast_to([[-1.], [-1.5], [-2], [-2.5]], [4, grid_size**2])\n",
        "samps_bern = tfd.Bernoulli(logits=logits).sample(seed=(2, 3))\n",
        "\n",
        "plt.figure(figsize=(12, 6))\n",
        "for i, (samp, samp_bern) in enumerate(zip(samps_dpp, samps_bern)):\n",
        "  plt.subplot(241 + i)\n",
        "  plt.scatter(*points[np.where(samp)].T)\n",
        "  plt.title(f'DPP, length scale={kernel_lengthscale[i]}')\n",
        "  plt.xticks([])\n",
        "  plt.yticks([])\n",
        "  plt.gca().set_aspect(1.)\n",
        "  plt.subplot(241 + i + 4)\n",
        "  plt.scatter(*points[np.where(samp_bern)].T)\n",
        "  plt.title(f'bernoulli, logit={logits[i,0]}')\n",
        "  plt.xticks([])\n",
        "  plt.yticks([])\n",
        "  plt.gca().set_aspect(1.)\n",
        "\n",
        "plt.tight_layout()\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "qim-evPz8e72"
      },
      "source": [
        "### `SigmoidBeta`\n",
        "\n",
        "Log-odds of two gamma distributions. More numerically stable sample space than `Beta`."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "id": "eIpGyo7Glx9s"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light",
            "tags": []
          },
          "output_type": "display_data"
        },
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Old way, fractions non-finite:\n",
            "0.4215\n",
            "0.8624\n"
          ]
        }
      ],
      "source": [
        "plt.hist(tfd.SigmoidBeta(concentration1=.01, concentration0=2.).sample(10_000, seed=(1, 23)),\n",
        "         bins='auto', density=True);\n",
        "plt.show()\n",
        "\n",
        "print('Old way, fractions non-finite:')\n",
        "print(np.sum(~tf.math.is_finite(\n",
        "    tfb.Invert(tfb.Sigmoid())(tfd.Beta(concentration1=.01, concentration0=2.)).sample(10_000, seed=(1, 23)))) / 10_000)\n",
        "print(np.sum(~tf.math.is_finite(\n",
        "    tfb.Invert(tfb.Sigmoid())(tfd.Beta(concentration1=2., concentration0=.01)).sample(10_000, seed=(2, 34)))) / 10_000)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "hGGkU_8A8tOn"
      },
      "source": [
        "### Zipf\n",
        "Added JAX support."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "id": "l8bw9c49qPoY"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light",
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.hist(tfd.Zipf(3.).sample(1_000, seed=(12, 34)).numpy(), bins='auto', density=True, log=True);"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "vjl-c4g78FBl"
      },
      "source": [
        "### `NormalInverseGaussian`\n",
        "\n",
        "Flexible parametric family that supports heavy tails, skewed, and vanilla Normal."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "nXPmCA0k8G00"
      },
      "source": [
        "### `MatrixNormalLinearOperator`\n",
        "Matrix Normal distribution."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "id": "v8uMP5hcr2kx"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:From /usr/local/lib/python3.7/dist-packages/tensorflow/python/ops/linalg/linear_operator_kronecker.py:224: LinearOperator.graph_parents (from tensorflow.python.ops.linalg.linear_operator) is deprecated and will be removed in a future version.\n",
            "Instructions for updating:\n",
            "Do not call `graph_parents`.\n"
          ]
        },
        {
          "data": {
            "text/plain": [
              "<tf.Tensor: shape=(2, 3), dtype=float32, numpy=\n",
              "array([[1.2495145, 1.549366 , 3.2748342],\n",
              "       [3.7330258, 4.3413105, 4.83423  ]], dtype=float32)>"
            ]
          },
          "execution_count": 6,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "# Initialize a single 2 x 3 Matrix Normal.\n",
        "mu = [[1., 2, 3], [3., 4, 5]]\n",
        "col_cov = [[ 0.36,  0.12,  0.06],\n",
        "           [ 0.12,  0.29, -0.13],\n",
        "           [ 0.06, -0.13,  0.26]]\n",
        "scale_column = tf.linalg.LinearOperatorLowerTriangular(tf.linalg.cholesky(col_cov))\n",
        "scale_row = tf.linalg.LinearOperatorDiag([0.9, 0.8])\n",
        "\n",
        "mvn = tfd.MatrixNormalLinearOperator(loc=mu, scale_row=scale_row, scale_column=scale_column)\n",
        "mvn.sample()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Idxrh0IC8SGs"
      },
      "source": [
        "### `MatrixStudentTLinearOperator`\n",
        "Matrix T distribution."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "id": "lQkQ-bw0sLr3"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<tf.Tensor: shape=(2, 3), dtype=float32, numpy=\n",
              "array([[1.6549466, 2.6708362, 2.8629923],\n",
              "       [2.1222284, 3.6904747, 5.08014  ]], dtype=float32)>"
            ]
          },
          "execution_count": 7,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "mu = [[1., 2, 3], [3., 4, 5]]\n",
        "col_cov = [[ 0.36,  0.12,  0.06],\n",
        "           [ 0.12,  0.29, -0.13],\n",
        "           [ 0.06, -0.13,  0.26]]\n",
        "scale_column = tf.linalg.LinearOperatorLowerTriangular(tf.linalg.cholesky(col_cov))\n",
        "scale_row = tf.linalg.LinearOperatorDiag([0.9, 0.8])\n",
        "\n",
        "mvn = tfd.MatrixTLinearOperator(\n",
        "    df=2.,\n",
        "    loc=mu,\n",
        "    scale_row=scale_row,\n",
        "    scale_column=scale_column)\n",
        "mvn.sample()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "d-aAkORa77LE"
      },
      "source": [
        "## Distributions [software / wrappers]"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "-IVGCYN6o5SX"
      },
      "source": [
        "### `Sharded`\n",
        "Shards independent event portions of a distribution across multiple processors. Aggregates `log_prob` across devices, handles gradients in concert with `tfp.experimental.distribute.JointDistribution*`. Much more in the [Distributed Inference](https://www.tensorflow.org/probability/examples/Distributed_Inference_with_JAX) notebook."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "id": "GpW6oXQjpKJj"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:There are non-GPU devices in `tf.distribute.Strategy`, not using nccl allreduce.\n",
            "WARNING:tensorflow:Collective ops is not configured at program startup. Some performance features may not be enabled.\n",
            "INFO:tensorflow:Using MirroredStrategy with devices ('/job:localhost/replica:0/task:0/device:CPU:0', '/job:localhost/replica:0/task:0/device:CPU:1')\n",
            "INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0', '/job:localhost/replica:0/task:0/device:CPU:1').\n"
          ]
        },
        {
          "data": {
            "text/plain": [
              "(PerReplica:{\n",
              "   0: <tf.Tensor: shape=(), dtype=float32, numpy=0.0051413667>,\n",
              "   1: <tf.Tensor: shape=(), dtype=float32, numpy=-0.3393052>\n",
              " }, PerReplica:{\n",
              "   0: <tf.Tensor: shape=(), dtype=float32, numpy=-1.8954543>,\n",
              "   1: <tf.Tensor: shape=(), dtype=float32, numpy=-1.8954543>\n",
              " })"
            ]
          },
          "execution_count": 8,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "strategy = tf.distribute.MirroredStrategy()\n",
        "\n",
        "@tf.function\n",
        "def sample_and_lp(seed):\n",
        "  d = tfp.experimental.distribute.Sharded(tfd.Normal(0, 1))\n",
        "  s = d.sample(seed=seed)\n",
        "  return s, d.log_prob(s)\n",
        "\n",
        "strategy.run(sample_and_lp, args=(tf.constant([12,34]),))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "l3CaO7rPulgw"
      },
      "source": [
        "### `BatchBroadcast`\n",
        "\n",
        "Implicitly broadcast the batch dimensions of an underlying distribution _with_ or _to_ a given batch shape."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "id": "yKtX4e6xuq63"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "underlying: tfp.distributions.MultivariateNormalDiag(\"MultivariateNormalDiag\", batch_shape=[7, 1], event_shape=[5], dtype=float32)\n",
            "broadcast [7, 1] *with* [8, 1, 6]: tfp.distributions.BatchBroadcast(\"BatchBroadcastMultivariateNormalDiag\", batch_shape=[8, 7, 6], event_shape=[5], dtype=float32)\n",
            "broadcast [7, 1] *to* [8, 1, 6] is invalid: Argument `to_shape` ([8 1 6]) is incompatible with underlying distribution batch shape ((7, 1)).\n",
            "broadcast [7, 1] *to* [8, 7, 6]: tfp.distributions.BatchBroadcast(\"BatchBroadcastMultivariateNormalDiag\", batch_shape=[8, 7, 6], event_shape=[5], dtype=float32)\n"
          ]
        }
      ],
      "source": [
        "underlying = tfd.MultivariateNormalDiag(tf.zeros([7, 1, 5]), tf.ones([5]))\n",
        "print('underlying:', underlying)\n",
        "\n",
        "d = tfd.BatchBroadcast(underlying, [8, 1, 6])\n",
        "print('broadcast [7, 1] *with* [8, 1, 6]:', d)\n",
        "\n",
        "try:\n",
        "  tfd.BatchBroadcast(underlying, to_shape=[8, 1, 6])\n",
        "except ValueError as e:\n",
        "  print('broadcast [7, 1] *to* [8, 1, 6] is invalid:', e)\n",
        "\n",
        "d = tfd.BatchBroadcast(underlying, to_shape=[8, 7, 6])\n",
        "print('broadcast [7, 1] *to* [8, 7, 6]:', d)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "d8DyDFP5WK6B"
      },
      "source": [
        "### `Masked`\n",
        "\n",
        "For single-program/multiple-data or sparse-as-masked-dense use-cases, a distribution that masks out the `log_prob` of invalid underlying distributions."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {
        "id": "4DQQ7VTwWbAa"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "tf.Tensor(\n",
            "[[-2.3054113 -1.8524303 -1.2220721  0.         0.         0.\n",
            "   0.       ]\n",
            " [-1.118623  -1.1370811 -1.1574132 -5.884986   0.         0.\n",
            "   0.       ]], shape=(2, 7), dtype=float32)\n",
            "tf.Tensor([ 0.         -0.93683904  0.        ], shape=(3,), dtype=float32)\n"
          ]
        }
      ],
      "source": [
        "d = tfd.Masked(tfd.Normal(tf.zeros([7]), 1), \n",
        "               validity_mask=tf.sequence_mask([3, 4], 7))\n",
        "print(d.log_prob(d.sample(seed=(1, 1))))\n",
        "\n",
        "d = tfd.Masked(tfd.Normal(0, 1), \n",
        "               validity_mask=[False, True, False],\n",
        "               safe_sample_fn=tfd.Distribution.mode)\n",
        "print(d.log_prob(d.sample(seed=(2, 2))))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Y52jA6ypIQm1"
      },
      "source": [
        "## Bijectors\n",
        "- Bijectors\n",
        "  - Add bijectors to mimic `tf.nest.flatten` (`tfb.tree_flatten`) and `tf.nest.pack_sequence_as` (`tfb.pack_sequence_as`).\n",
        "  - Adds `tfp.experimental.bijectors.Sharded`\n",
        "  - Remove deprecated `tfb.ScaleTrilL`.  Use `tfb.FillScaleTriL` instead.\n",
        "  - Adds `cls.parameter_properties()` annotations for Bijectors.\n",
        "  - Extend range `tfb.Power` to all reals for odd integer powers.\n",
        "  - Infer the log-deg-jacobian of scalar bijectors using autodiff, if not otherwise specified.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Gtls14gqtIpk"
      },
      "source": [
        "### Restructuring bijectors"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "metadata": {
        "id": "GabDIiMAtPN2"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "[<tf.Tensor: shape=(), dtype=float32, numpy=1.0>, <tf.Tensor: shape=(), dtype=float32, numpy=2.0>, <tf.Tensor: shape=(), dtype=float32, numpy=3.0>]\n",
            "(<tf.Tensor: shape=(), dtype=float32, numpy=1.0>, {'b': <tf.Tensor: shape=(), dtype=float32, numpy=2.0>, 'c': <tf.Tensor: shape=(), dtype=float32, numpy=3.0>})\n",
            "(<tf.Tensor: shape=(), dtype=float32, numpy=1.0>, {'b': <tf.Tensor: shape=(), dtype=float32, numpy=2.0>, 'c': <tf.Tensor: shape=(), dtype=float32, numpy=3.0>})\n",
            "[<tf.Tensor: shape=(), dtype=float32, numpy=1.0>, <tf.Tensor: shape=(), dtype=float32, numpy=2.0>, <tf.Tensor: shape=(), dtype=float32, numpy=3.0>]\n"
          ]
        }
      ],
      "source": [
        "ex = (tf.constant(1.), dict(b=tf.constant(2.), c=tf.constant(3.)))\n",
        "b = tfb.tree_flatten(ex)\n",
        "print(b.forward(ex))\n",
        "print(b.inverse(list(tf.constant([1., 2, 3]))))\n",
        "\n",
        "b = tfb.pack_sequence_as(ex)\n",
        "print(b.forward(list(tf.constant([1., 2, 3]))))\n",
        "print(b.inverse(ex))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ibpH6g2zsR6i"
      },
      "source": [
        "### `Sharded`\n",
        "SPMD reduction in log-determinant. See `Sharded` in Distributions, below."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "metadata": {
        "id": "Ja65bfTQsXnD"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:There are non-GPU devices in `tf.distribute.Strategy`, not using nccl allreduce.\n",
            "WARNING:tensorflow:Collective ops is not configured at program startup. Some performance features may not be enabled.\n",
            "INFO:tensorflow:Using MirroredStrategy with devices ('/job:localhost/replica:0/task:0/device:CPU:0', '/job:localhost/replica:0/task:0/device:CPU:1')\n",
            "WARNING:tensorflow:Using MirroredStrategy eagerly has significant overhead currently. We will be working on improving this in the future, but for now please wrap `call_for_each_replica` or `experimental_run` or `run` inside a tf.function to get the best performance.\n",
            "INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0', '/job:localhost/replica:0/task:0/device:CPU:1').\n",
            "INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0', '/job:localhost/replica:0/task:0/device:CPU:1').\n"
          ]
        },
        {
          "data": {
            "text/plain": [
              "(PerReplica:{\n",
              "   0: <tf.Tensor: shape=(), dtype=float32, numpy=0.87746525>,\n",
              "   1: <tf.Tensor: shape=(), dtype=float32, numpy=0.24580425>\n",
              " }, PerReplica:{\n",
              "   0: <tf.Tensor: shape=(), dtype=float32, numpy=-0.48870325>,\n",
              "   1: <tf.Tensor: shape=(), dtype=float32, numpy=-0.48870325>\n",
              " }, PerReplica:{\n",
              "   0: <tf.Tensor: shape=(), dtype=float32, numpy=3.9154015>,\n",
              "   1: <tf.Tensor: shape=(), dtype=float32, numpy=3.9154015>\n",
              " })"
            ]
          },
          "execution_count": 13,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "strategy = tf.distribute.MirroredStrategy()\n",
        "\n",
        "def sample_lp_logdet(seed):\n",
        "  d = tfd.TransformedDistribution(tfp.experimental.distribute.Sharded(tfd.Normal(0, 1), shard_axis_name='i'),\n",
        "                                  tfp.experimental.bijectors.Sharded(tfb.Sigmoid(), shard_axis_name='i'))\n",
        "  s = d.sample(seed=seed)\n",
        "  return s, d.log_prob(s), d.bijector.inverse_log_det_jacobian(s)\n",
        "strategy.run(sample_lp_logdet, (tf.constant([1, 2]),))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "nXyY5bgLIyrf"
      },
      "source": [
        "## VI\n",
        "\n",
        "  - Adds `build_split_flow_surrogate_posterior` to `tfp.experimental.vi` to build structured VI surrogate posteriors from normalizing flows.\n",
        "  - Adds `build_affine_surrogate_posterior` to `tfp.experimental.vi` for construction of ADVI surrogate posteriors from an event shape.\n",
        "  - Adds `build_affine_surrogate_posterior_from_base_distribution` to `tfp.experimental.vi` to enable construction of ADVI surrogate posteriors with correlation structures induced by affine transformations.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "LQRLYKUSyZGf"
      },
      "source": [
        "### VI/MAP/MLE\n",
        "  - Added convenience method `tfp.experimental.util.make_trainable(cls)` to create trainable instances of distributions and bijectors."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "O-YaQ-SWwGr9"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "(<tf.Variable 'Gamma_trainable_variables/concentration:0' shape=() dtype=float32, numpy=1.0296053>, <tf.Variable 'Gamma_trainable_variables/log_rate:0' shape=() dtype=float32, numpy=-0.3465951>)\n",
            "tfp.distributions.Gamma(\"Gamma\", batch_shape=[], event_shape=[], dtype=float32)\n"
          ]
        }
      ],
      "source": [
        "d = tfp.experimental.util.make_trainable(tfd.Gamma)\n",
        "print(d.trainable_variables)\n",
        "print(d)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "FUx2oXURd3nE"
      },
      "source": [
        "## MCMC\n",
        "\n",
        "  - MCMC diagnostics support arbitrary structures of states, not just lists.\n",
        "  - `remc_thermodynamic_integrals` added to `tfp.experimental.mcmc`\n",
        "  - Adds `tfp.experimental.mcmc.windowed_adaptive_hmc`\n",
        "  - Adds an experimental API for initializing a Markov chain from a near-zero uniform distribution in unconstrained space. `tfp.experimental.mcmc.init_near_unconstrained_zero`\n",
        "  - Adds an experimental utility for retrying Markov Chain initialization until an acceptable point is found. `tfp.experimental.mcmc.retry_init`\n",
        "  - Shuffling experimental streaming MCMC API to slot into tfp.mcmc with a minimum of disruption.\n",
        "  - Adds `ThinningKernel` to `experimental.mcmc`.\n",
        "  - Adds `experimental.mcmc.run_kernel` driver as a candidate streaming-based replacement to `mcmc.sample_chain`\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "8euU8cFYIWwc"
      },
      "source": [
        "### `init_near_unconstrained_zero`, `retry_init`"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 73,
      "metadata": {
        "id": "F7y01nhcIJaB"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "tfp.distributions.TransformedDistribution(\"default_joint_bijectorrestructureJointDistributionSequential\", batch_shape=StructTuple(\n",
            "  c0=[],\n",
            "  c1=[]\n",
            "), event_shape=StructTuple(\n",
            "  c0=[],\n",
            "  c1=[]\n",
            "), dtype=StructTuple(\n",
            "  c0=float32,\n",
            "  c1=float32\n",
            "))\n"
          ]
        },
        {
          "data": {
            "text/plain": [
              "StructTuple(\n",
              "  c0=<tf.Tensor: shape=(), dtype=float32, numpy=1.7879653>,\n",
              "  c1=<tf.Tensor: shape=(), dtype=float32, numpy=0.34548905>\n",
              ")"
            ]
          },
          "execution_count": 73,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "@tfd.JointDistributionCoroutine\n",
        "def model():\n",
        "  Root = tfd.JointDistributionCoroutine.Root\n",
        "  c0 = yield Root(tfd.Gamma(2, 2, name='c0'))\n",
        "  c1 = yield Root(tfd.Gamma(2, 2, name='c1'))\n",
        "  counts = yield tfd.Sample(tfd.BetaBinomial(23, c1, c0), 10, name='counts')\n",
        "jd = model.experimental_pin(counts=model.sample(seed=[20, 30]).counts)\n",
        "\n",
        "init_dist = tfp.experimental.mcmc.init_near_unconstrained_zero(jd)\n",
        "print(init_dist)\n",
        "\n",
        "tfp.experimental.mcmc.retry_init(init_dist.sample, jd.unnormalized_log_prob)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "zETWMfIZ9Vp9"
      },
      "source": [
        "### Windowed adaptive HMC and NUTS samplers"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 41,
      "metadata": {
        "id": "HWaHCIij-RQX"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "StructTuple(\n",
            "  c0=<tf.Tensor: shape=(), dtype=float32, numpy=0.7161876>,\n",
            "  c1=<tf.Tensor: shape=(), dtype=float32, numpy=1.7696666>,\n",
            "  counts=<tf.Tensor: shape=(10,), dtype=float32, numpy=array([ 6., 10., 23.,  7.,  2., 20., 14., 16., 22., 17.], dtype=float32)>\n",
            ")\n",
            "WARNING:tensorflow:6 out of the last 6 calls to <function windowed_adaptive_hmc at 0x7fda42bed8c0> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for  more details.\n",
            "StructTuple(\n",
            "  c0=<tf.Tensor: shape=(), dtype=float32, numpy=0.7161876>,\n",
            "  c1=<tf.Tensor: shape=(), dtype=float32, numpy=1.7696666>,\n",
            "  counts=<tf.Tensor: shape=(250,), dtype=float32, numpy=\n",
            "    array([ 6., 10., 23.,  7.,  2., 20., 14., 16., 22., 17., 22., 21.,  6.,\n",
            "           21., 12., 22., 23., 16., 18., 21., 16., 17., 17., 16., 21., 14.,\n",
            "           23., 15., 10., 19.,  8., 23., 23., 14.,  1., 23., 16., 22., 20.,\n",
            "           20., 22., 15., 16., 20., 20., 21., 23., 22., 21., 15., 18., 23.,\n",
            "           12., 16., 19., 23., 18.,  5., 22., 22., 22., 18., 12., 17., 17.,\n",
            "           16.,  8., 22., 20., 23.,  3., 12., 14., 18.,  7., 19., 19.,  9.,\n",
            "           10., 23., 14., 22., 22., 21., 13., 23., 14., 23., 10., 17., 23.,\n",
            "           17., 20., 16., 20., 19., 14.,  0., 17., 22., 12.,  2., 17., 15.,\n",
            "           14., 23., 19., 15., 23.,  2., 21., 23., 21.,  7., 21., 12., 23.,\n",
            "           17., 17.,  4., 22., 16., 14., 19., 19., 20.,  6., 16., 14., 18.,\n",
            "           21., 12., 21., 21., 22.,  2., 19., 11.,  6., 19.,  1., 23., 23.,\n",
            "           14.,  6., 23., 18.,  8., 20., 23., 13., 20., 18., 23., 17., 22.,\n",
            "           23., 20., 18., 22., 16., 23.,  9., 22., 21., 16., 20., 21., 16.,\n",
            "           23.,  7., 13., 23., 19.,  3., 13., 23., 23., 13., 19., 23., 20.,\n",
            "           18.,  8., 19., 14., 12.,  6.,  8., 23.,  3., 13., 21., 23., 22.,\n",
            "           23., 19., 22., 21., 15., 22., 21., 21., 23.,  9., 19., 20., 23.,\n",
            "           11., 23., 14., 23., 14., 21., 21., 10., 23.,  9., 13.,  1.,  8.,\n",
            "            8., 20., 21., 21., 21., 14., 16., 16.,  9., 23., 22., 11., 23.,\n",
            "           12., 18.,  1., 23.,  9.,  3., 21., 21., 23., 22., 18., 23., 16.,\n",
            "            3., 11., 16.], dtype=float32)>\n",
            ")\n"
          ]
        },
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 720x288 with 2 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light",
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "fig, ax = plt.subplots(1, 2, figsize=(10, 4))\n",
        "for i, n_evidence in enumerate((10, 250)):\n",
        "  ax[i].set_title(f'n evidence = {n_evidence}')\n",
        "  ax[i].set_xlim(0, 2.5); ax[i].set_ylim(0, 3.5)\n",
        "  @tfd.JointDistributionCoroutine\n",
        "  def model():\n",
        "    Root = tfd.JointDistributionCoroutine.Root\n",
        "    c0 = yield Root(tfd.Gamma(2, 2, name='c0'))\n",
        "    c1 = yield Root(tfd.Gamma(2, 2, name='c1'))\n",
        "    counts = yield tfd.Sample(tfd.BetaBinomial(23, c1, c0), n_evidence, name='counts')\n",
        "  s = model.sample(seed=[20, 30])\n",
        "  print(s)\n",
        "  jd = model.experimental_pin(counts=s.counts)\n",
        "  states, trace = tf.function(tfp.experimental.mcmc.windowed_adaptive_hmc)(\n",
        "      100, jd, num_leapfrog_steps=5, seed=[100, 200])\n",
        "  ax[i].scatter(states.c0.numpy().reshape(-1), states.c1.numpy().reshape(-1), \n",
        "                marker='+', alpha=.1)\n",
        "  ax[i].scatter(s.c0, s.c1, marker='+', color='r')"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "UwebvDOFIpQ4"
      },
      "source": [
        "## Math, stats\n",
        "\n",
        "\n",
        "- Math/linalg\n",
        "  - Add `tfp.math.trapz` for trapezoidal integration.\n",
        "  - Add `tfp.math.log_bessel_kve`.\n",
        "  - Add `no_pivot_ldl` to `experimental.linalg`.\n",
        "  - Add `marginal_fn` argument to `GaussianProcess` (see `no_pivot_ldl`).\n",
        "  - Added `tfp.math.atan_difference(x, y)`\n",
        "  - Add `tfp.math.erfcx`, `tfp.math.logerfc` and `tfp.math.logerfcx`\n",
        "  - Add `tfp.math.dawsn` for Dawson's Integral.\n",
        "  - Add `tfp.math.igammaincinv`, `tfp.math.igammacinv`.\n",
        "  - Add `tfp.math.sqrt1pm1`.\n",
        "  - Add `LogitNormal.stddev_approx` and `LogitNormal.variance_approx`\n",
        "  - Add `tfp.math.owens_t` for the Owen's T function.\n",
        "  - Add `bracket_root` method to automatically initialize bounds for a root search.\n",
        "  - Add Chandrupatla's method for finding roots of scalar functions.\n",
        "\n",
        "- Stats\n",
        "  - `tfp.stats.windowed_mean` efficiently computes windowed means.\n",
        "  - `tfp.stats.windowed_variance` efficiently and accurately computes windowed variances.\n",
        "  - `tfp.stats.cumulative_variance` efficiently and accurately computes cumulative variances.\n",
        "  - `RunningCovariance` and friends can now be initialized from an example Tensor, not just from explicit shape and dtype.\n",
        "  - Cleaner API for `RunningCentralMoments`, `RunningMean`, `RunningPotentialScaleReduction`.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "f375DSTDA-DV"
      },
      "source": [
        "### Owen's T, Erfcx, Logerfc, Logerfcx, Dawson functions"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "RH7qe5lpBI0M"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Calculated values: [0.07896 0.01134]\n",
            "Expected values: [0.07932763 0.01137507]\n"
          ]
        }
      ],
      "source": [
        "# Owen's T gives the probability that X > h, 0 < Y < a * X. Let's check that\n",
        "# with random sampling.\n",
        "h = np.array([1., 2.]).astype(np.float32)\n",
        "a = np.array([10., 11.5]).astype(np.float32)\n",
        "probs = tfp.math.owens_t(h, a)\n",
        "\n",
        "x = tfd.Normal(0., 1.).sample(int(1e5), seed=(6, 245)).numpy()\n",
        "y = tfd.Normal(0., 1.).sample(int(1e5), seed=(7, 245)).numpy()\n",
        "\n",
        "true_values = (\n",
        "    (x[..., np.newaxis] > h) &\n",
        "    (0. < y[..., np.newaxis]) &\n",
        "    (y[..., np.newaxis] < a * x[..., np.newaxis]))\n",
        "\n",
        "print('Calculated values: {}'.format(\n",
        "    np.count_nonzero(true_values, axis=0) / 1e5))\n",
        "\n",
        "print('Expected values: {}'.format(probs))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "VWZjRfnLG5sc"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light",
            "tags": []
          },
          "output_type": "display_data"
        },
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light",
            "tags": []
          },
          "output_type": "display_data"
        },
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light",
            "tags": []
          },
          "output_type": "display_data"
        },
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light",
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "x = np.linspace(-3., 3., 100)\n",
        "plt.plot(x, tfp.math.erfcx(x))\n",
        "plt.ylabel('$erfcx(x)$')\n",
        "plt.show()\n",
        "\n",
        "plt.plot(x, tfp.math.logerfcx(x))\n",
        "plt.ylabel('$logerfcx(x)$')\n",
        "plt.show()\n",
        "\n",
        "plt.plot(x, tfp.math.logerfc(x))\n",
        "plt.ylabel('$logerfc(x)$')\n",
        "plt.show()\n",
        "\n",
        "plt.plot(x, tfp.math.dawsn(x))\n",
        "plt.ylabel('$dawsn(x)$')\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "TAo7wY-vIbeR"
      },
      "source": [
        "### igammainv /  igammacinv"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "2Le6YC8JIkII"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "x: [ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]\n",
            "igammainv(igamma(a, x)):\n",
            " [1.        1.9999992 3.000003  4.0000024 5.0000257 5.999887  7.0002484\n",
            " 7.999243  8.99872   9.994673 ]\n",
            "\n",
            "\n",
            "x: [ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]\n",
            "igammacinv(igammac(a, x)):\n",
            " [1.       2.       3.       4.       5.       6.       7.       8.000001\n",
            " 9.       9.999999]\n"
          ]
        }
      ],
      "source": [
        "# Igammainv and Igammacinv are inverses to Igamma and Igammac\n",
        "\n",
        "x = np.linspace(1., 10., 10)\n",
        "y = tf.math.igamma(0.3, x)\n",
        "x_prime = tfp.math.igammainv(0.3, y)\n",
        "print('x: {}'.format(x))\n",
        "print('igammainv(igamma(a, x)):\\n {}'.format(x_prime))\n",
        "\n",
        "y = tf.math.igammac(0.3, x)\n",
        "x_prime = tfp.math.igammacinv(0.3, y)\n",
        "\n",
        "print('\\n')\n",
        "print('x: {}'.format(x))\n",
        "print('igammacinv(igammac(a, x)):\\n {}'.format(x_prime))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "WPNKYHVP9bs9"
      },
      "source": [
        "### log-kve"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "OuQOhwJTHidN"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "Text(0.5, 1.0, 'Log(BesselKve(v, x)')"
            ]
          },
          "execution_count": 26,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light",
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "x = np.linspace(0., 5., 100)\n",
        "for v in [0.5, 2., 3]:\n",
        "  plt.plot(x, tfp.math.log_bessel_kve(v, x).numpy())\n",
        "\n",
        "plt.title('Log(BesselKve(v, x)')"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "y6UbD6n0jbgn"
      },
      "source": [
        "## Other\n",
        "\n",
        "\n",
        "- STS\n",
        "  - Speed up STS forecasting and decomposition using internal `tf.function` wrapping.\n",
        "  - Add option to speed up filtering in `LinearGaussianSSM` when only the final step's results are required.\n",
        "  - Variational Inference with joint distributions: [example notebook with the Radon model](https://www.tensorflow.org/probability/examples/Variational_Inference_and_Joint_Distributions).\n",
        "  - Add experimental support for transforming any distribution into a preconditioning bijector.\n",
        "\n",
        "- Adds `tfp.random.sanitize_seed`.\n",
        "- Adds `tfp.random.spherical_uniform`.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 64,
      "metadata": {
        "id": "bqEYFeZhG_yW"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 288x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light",
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.figure(figsize=(4, 4))\n",
        "seed = tfp.random.sanitize_seed(123)\n",
        "seed1, seed2 = tfp.random.split_seed(seed)\n",
        "samps = tfp.random.spherical_uniform([30], dimension=2, seed=seed1)\n",
        "plt.scatter(*samps.numpy().T, marker='+')\n",
        "samps = tfp.random.spherical_uniform([30], dimension=2, seed=seed2)\n",
        "plt.scatter(*samps.numpy().T, marker='+');"
      ]
    }
  ],
  "metadata": {
    "colab": {
      "collapsed_sections": [],
      "name": "TFP_Release_Notebook_0_13_0.ipynb",
      "toc_visible": true
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
